home *** CD-ROM | disk | FTP | other *** search
/ PC User 2003 September / Australian PC User - September 2003 (CD1).iso / magstuff / web / files / dwmx61.exe / Disk1 / data1.cab / Configuration_En / DataSources / UD4-ColdFusion / CFSTOREDPROC.js < prev    next >
Encoding:
JavaScript  |  2002-11-25  |  10.6 KB  |  352 lines

  1. // Copyright 2001 Macromedia, Inc. All rights reserved.
  2. var DEBUG = false
  3. var command_filename = "SP_D.gif"
  4. var command_rs_filename = "RS_D.gif"
  5. var datasourceleaf_filename = "DSL_D.gif"
  6. var recordset_filename = "RS_D.gif"
  7.  
  8.  
  9. function addDynamicSource()
  10. {
  11.   dw.popupServerBehavior("CFStoredProc.htm");
  12. }
  13.  
  14.  
  15. function findDynamicSources()
  16. {
  17.   var DSL = new Array();
  18.   var currentdom = dreamweaver.getDocumentDOM();
  19.  
  20.   if (!currentdom)
  21.   {
  22.     return DSL
  23.   }
  24.  
  25.   var nodes = currentdom.getElementsByTagName("CFSTOREDPROC")
  26.   for (var index =0 ; index < nodes.length ; index++)
  27.   {
  28.     var node = nodes[index]
  29.     ssRec = findSSrec(node,"cfstoredproc");
  30.  
  31.     if (ssRec) 
  32.     {
  33.       if (ssRec.resultNode)
  34.       {
  35.         DSL[DSL.length] = new ObjectInfo(ssRec.title, command_filename, true, "Recordset.htm",ssRec.resultsetName)
  36.       }
  37.       else
  38.       {
  39.         DSL[DSL.length] = new ObjectInfo(ssRec.title, command_filename, true, "CFSTOREDPROC.htm","")
  40.       }
  41.     }
  42.   }
  43.  
  44.   return DSL;
  45. }
  46.  
  47. ////////////////////////////////////////////////////////////////////////////////
  48. //  Function: generateDynamicSourceBindings()
  49. //
  50. //  Returns a list of bindings for elementNode on the page.
  51. ////////////////////////////////////////////////////////////////////////////////
  52. function generateDynamicSourceBindings(elementName)
  53. {
  54.   var BindingsArray = new Array();
  55.   var outArray;
  56.  
  57.  
  58.   ssRec = findSSrecByTitle(elementName,"cfstoredproc")
  59.  
  60.   if (ssRec) {
  61.     elementNode = ssRec.selectedNode;
  62.   } else {
  63.     elementNode = findSourceNode(elementName);
  64.   }
  65.  
  66.   var rsDom = dreamweaver.getDocumentDOM(dreamweaver.getConfigurationPath() + "/ServerBehaviors/UD4-ColdFusion/CFSTOREDPROC.htm")
  67.   if(elementNode && (elementNode.tagName == "CFSTOREDPROC"))
  68.   {
  69.     var spName = GetSPName(elementNode);
  70.     CachedParametersArray  = getCachedParametersArray(spName);
  71.  
  72.     if (CachedParametersArray .length)
  73.     {
  74.       //we use +3 since our Parameter has name,type,direction
  75.       for (var j=0; j < CachedParametersArray .length ; j+=3)
  76.       {
  77.         var dir = CachedParametersArray[j+1];
  78.         if (dir == 4 || dir == 2 || dir == 3)
  79.         {
  80.            var paramName = StripChars("@", CachedParametersArray[j]);
  81.            BindingsArray.push(paramName);
  82.         }
  83.       }
  84.     }
  85.     else
  86.     {
  87.       BindingsArray = rsDom.parentWindow.getDynamicBindings(elementNode)
  88.       var ss = findSSrec(elementNode, "cfstoredproc")
  89.       if (ss)
  90.       {
  91.         var CachedParameterString = MMDB.getSPParamsAsString(ss.connectionName,ss.procedure);
  92.         SaveParametersForCache(spName,CachedParameterString);
  93.       }
  94.     }
  95.  
  96.     var rnode = GetRecordsetNodeForCommand(elementNode)
  97.     if (rnode) 
  98.     {
  99.       CachedCTArray  = getCachedColumnAndTypeArray(rnode.getAttribute("NAME"));
  100.       if (CachedCTArray.length)
  101.       {
  102.         for (var j=0; j < CachedCTArray.length ; j+=2)
  103.         {
  104.           BindingsArray.push(rnode.getAttribute("NAME") + "." + CachedCTArray[j]);
  105.         }
  106.       }
  107.       else
  108.       {
  109.         var colArray = new Array();
  110.         colArray = rsDom.parentWindow.getDynamicBindings(rnode)
  111.         SaveColumnAndTypeArrayForCache(rnode.getAttribute("NAME"),colArray);
  112.         for (var cvar=0;cvar < colArray.length ;cvar+=2) 
  113.         {
  114.           BindingsArray.push(rnode.getAttribute("NAME") + "." + colArray[cvar]);
  115.         }
  116.       }
  117.  
  118.       BindingsArray.push(rnode.getAttribute("NAME") + "."+ MM.LABEL_FirstRecordIndex);
  119.       BindingsArray.push(rnode.getAttribute("NAME") + "."+ MM.LABEL_LastRecordIndex);
  120.       BindingsArray.push(rnode.getAttribute("NAME") + "."+ MM.LABEL_TotalRecordIndex);
  121.     }
  122.         
  123.     outArray = GenerateObjectInfoForSourceBindings(BindingsArray, datasourceleaf_filename, "CFSTOREDPROC")
  124.   }
  125.   else if(elementNode && (elementNode.tagName == "CFPROCRESULT"))
  126.   {
  127.     CachedCTArray  = getCachedColumnAndTypeArray(elementNode.getAttribute("NAME"));
  128.     if (CachedCTArray.length)
  129.     {
  130.       for (var j=0; j < CachedCTArray.length ; j+=2)
  131.       {
  132.         BindingsArray.push(CachedCTArray[j]);
  133.       }
  134.     }
  135.     else
  136.     {
  137.       var colArray = new Array();
  138.       colArray = rsDom.parentWindow.getDynamicBindings(elementNode)
  139.       SaveColumnAndTypeArrayForCache(elementNode.getAttribute("NAME"),colArray);
  140.       for (var cvar=0;cvar < colArray.length ;cvar+=2) 
  141.       {
  142.         BindingsArray.push(colArray[cvar]);
  143.       }
  144.     }
  145.  
  146.     BindingsArray.push(MM.LABEL_FirstRecordIndex);
  147.     BindingsArray.push(MM.LABEL_LastRecordIndex);
  148.     BindingsArray.push(MM.LABEL_TotalRecordIndex);
  149.     outArray = GenerateObjectInfoForSourceBindings(BindingsArray, datasourceleaf_filename, "CFSTOREDPROC")
  150.   }
  151.  
  152.   return outArray;
  153. }
  154.  
  155.  
  156.  
  157.  
  158. ////////////////////////////////////////////////////////////////////////////////
  159. //
  160. //  Function: generateDynamicDataRef
  161. //
  162. //  Returns a dynamic binding string.
  163. ////////////////////////////////////////////////////////////////////////////////
  164. function generateDynamicDataRef(elementName,bindingName)
  165. {
  166.   var retStr="";
  167.  
  168.   var tokenindex = bindingName.indexOf(".");
  169.   if (tokenindex != -1) 
  170.   {
  171.     elementName = bindingName.substring(0,tokenindex);
  172.     bindingName = bindingName.substring(tokenindex+1);
  173.   }
  174.  
  175.   ssRec = findSSrecByTitle(elementName,"cfstoredproc")
  176.   if (ssRec) 
  177.   {
  178.     elementNode = ssRec.selectedNode;
  179.   } 
  180.   else 
  181.   {
  182.     elementNode = findSourceNode(elementName);
  183.   }
  184.  
  185.   if (elementNode && elementNode.tagName == "CFPROCRESULT")
  186.   {
  187.     if ((bindingName == MM.LABEL_FirstRecordIndex) || (bindingName == MM.LABEL_LastRecordIndex) || (bindingName == MM.LABEL_TotalRecordIndex))  
  188.     {
  189.       //  Recordset statistics.  These are useful when the page 
  190.       //  is being used for navigation through a large set of records.
  191.       //  Typically you add some text to the page that says something
  192.       //  like:
  193.       //  Records 10 to 15 of 63
  194.       //  where 10 corresponds to [first record index]
  195.       //  15 corresponds [last record index]
  196.       //  63 corresponds [total records]
  197.  
  198.       if (bindingName == MM.LABEL_FirstRecordIndex) 
  199.       {
  200.         retStr = "<cfoutput>#"  + elementName + "_first" + "#</cfoutput>";
  201.       }
  202.       else if (bindingName == MM.LABEL_LastRecordIndex) 
  203.       {
  204.         retStr = "<cfoutput>#"  + elementName + "_last" + "#</cfoutput>";
  205.       }
  206.       else if (bindingName == MM.LABEL_TotalRecordIndex)  
  207.       {
  208.         retStr = "<cfoutput>#"  + elementName + "_total" + "#</cfoutput>";
  209.       }
  210.     }
  211.     else 
  212.     {
  213.       retStr = "<cfoutput>#" + elementName + "." + bindingName + "#</cfoutput>"
  214.     }
  215.   }
  216.   else if(elementNode && (elementNode.tagName == "CFSTOREDPROC")) 
  217.   {
  218.     if (bindingName == "RETURN_VALUE")
  219.     {
  220.       retStr = "<cfoutput>#" + GetSPName(elementNode) + "__RETURN_VALUE#</cfoutput>"
  221.     }
  222.     else
  223.     {
  224.       retStr = "<cfoutput>#" + GetSPName(elementNode) + "__" + bindingName + "#</cfoutput>"
  225.     }
  226.   }
  227.  
  228.   retStr = stripCfoutputIfNested(retStr);
  229.   return retStr;
  230. }
  231.  
  232.  
  233. ////////////////////////////////////////////////////////////////////////////////
  234. //
  235. //  Function: inspectDynamicDataRef
  236. //
  237. //  Inspects a dynamic binding string and returns a pair of source and binding.
  238. ////////////////////////////////////////////////////////////////////////////////
  239. function inspectDynamicDataRef(expression)
  240. {
  241.   var retArray = new Array();
  242.   if(expression.length) 
  243.   {
  244.     var exprIndex = expression.indexOf("#");
  245.     if (exprIndex != -1)
  246.     {
  247.       // No need to search the string prior to the "<cfoutput>"
  248.       expression = "<cfoutput>"+expression.substr(exprIndex)+"</cfoutput>";
  249.  
  250.       var TranslatorDOM = dreamweaver.getDocumentDOM(dreamweaver.getConfigurationPath() + "/Translators/UD4-ColdFusion.htm");
  251.       if (TranslatorDOM)  
  252.       {
  253.         TranslatedStr = TranslatorDOM.parentWindow.miniTranslateMarkup("", "", expression, false);
  254.         if (TranslatedStr.length)
  255.         {
  256.           var found = TranslatedStr.search(/mm_dynamic_content\s+source=(\w+)\s+binding="([^"]+)"/ig)
  257.           if (found != -1)
  258.           {
  259.             var elementname = RegExp.$1;
  260.             var bindingname = RegExp.$2;
  261.             //map the name to node 
  262.             elementNode = findSourceNode(elementname);
  263.             if (elementNode)
  264.             {
  265.               if (elementNode.tagName == "CFPROCRESULT") 
  266.               {
  267.                 ///map the node to SSRec to get the title.
  268.                 parentNode = elementNode.parentNode;
  269.                 ssRec = findSSrec(parentNode,"cfstoredproc");
  270.               } 
  271.               else 
  272.               {
  273.                 ssRec = findSSrec(elementNode,"cfstoredproc");
  274.               }
  275.  
  276.               
  277.               if (ssRec) 
  278.               { 
  279.                 retArray[0] = ssRec.title;
  280.  
  281.                 if (elementNode.tagName == "CFPROCRESULT") 
  282.                 {
  283.  
  284.                   switch (bindingname) 
  285.                   {
  286.                     case "first":
  287.                     {
  288.                       retArray[1] = elementname + "." + MM.LABEL_FirstRecordIndex;
  289.                       break;
  290.                     }
  291.                     case "last":
  292.                     {
  293.                       retArray[1] = elementname + "." + MM.LABEL_LastRecordIndex;
  294.                       break;
  295.                     }
  296.                     case "total":
  297.                     {
  298.                       retArray[1] = elementname + "." + MM.LABEL_TotalRecordIndex;
  299.                       break;
  300.                     }
  301.                     default:
  302.                     {
  303.                       retArray[1] = elementname + "." + bindingname;
  304.                       break;
  305.                     }
  306.                   }             
  307.  
  308.                 } 
  309.                 else 
  310.                 {
  311.                   retArray[1] = bindingname;
  312.                 }
  313.               }
  314.             }
  315.           }
  316.             //alert("source=" + retArray[0] + " binding=" + retArray[1])
  317.         }
  318.       }
  319.     }
  320.   }
  321.   return retArray;
  322. }
  323.  
  324.  
  325.  
  326. ////////////////////////////////////////////////////////////////////////////////
  327. //
  328. //  Function: deleteDynamicSource
  329. //
  330. //  Deletes a dynamic source from the document.
  331. ////////////////////////////////////////////////////////////////////////////////
  332. function deleteDynamicSource(sourceName,bindingName)
  333. {
  334.   ssRec = findSSrecByTitle(sourceName,"cfstoredproc")
  335.  
  336.   if (ssRec) {
  337.     elementNode = ssRec.selectedNode;
  338.     var dom = dw.getDocumentDOM();
  339.     if (elementNode)  {
  340.       if (!bindingName) 
  341.       {
  342.         dw.serverBehaviorInspector.deleteServerBehavior(ssRec);
  343.       }
  344.       else
  345.       {
  346.         alert(MM.MSG_CantDelColumn);
  347.       }
  348.     }
  349.   }
  350. }
  351.  
  352.